home *** CD-ROM | disk | FTP | other *** search
/ Aminet 1 (Walnut Creek) / Aminet - June 1993 [Walnut Creek].iso / usenet / sources / volume89 / graphics / mandel18.4 < prev    next >
Internet Message Format  |  1989-05-18  |  55KB

  1. Path: xanth!ames!sun-barr!sun!swap!page
  2. From: page%swap@Sun.COM (Bob Page)
  3. Newsgroups: comp.sources.amiga
  4. Subject: v89i145:  mandel - mandelobrot generator v180, Part04/04
  5. Message-ID: <105556@sun.Eng.Sun.COM>
  6. Date: 17 May 89 15:53:47 GMT
  7. Sender: news@sun.Eng.Sun.COM
  8. Lines: 2046
  9. Approved: page@sun.com
  10.  
  11. Submitted-by: u211344@hnykun11.bitnet (Olaf 'Rhialto' Seibert)
  12. Posting-number: Volume 89, Issue 145
  13. Archive-name: graphics/mandel180.4
  14.  
  15. # This is a shell archive.
  16. # Remove anything above and including the cut line.
  17. # Then run the rest of the file through 'sh'.
  18. # Unpacked files will be owned by you and have default permissions.
  19. #----cut here-----cut here-----cut here-----cut here----#
  20. #!/bin/sh
  21. # shar: SHell ARchive
  22. # Run the following text through 'sh' to create:
  23. #    Notice
  24. #    Palette.c
  25. #    Select.blk
  26. #    Select.c
  27. #    Select.req
  28. #    minrexx.h
  29. # This is archive 4 of a 4-part kit.
  30. # This archive created: Wed May 17 20:45:14 1989
  31. echo "extracting Notice"
  32. sed 's/^X//' << \SHAR_EOF > Notice
  33. X/*
  34. X *                     +-----------------------------+
  35. X *                     | Mandelbrot Construction Set |
  36. X *                     +-----------------------------+
  37. X *
  38. X *                   (C) By Olaf {* KosmoSoft *} Seibert
  39. X *                         15 September 1987 V1.0
  40. X *                          22 January 1989 V1.1
  41. X *                          28 January 1989 V1.2
  42. X *                           16 April 1989 V1.3
  43. X *
  44. X *
  45. X * Copyright 1987, 1989 by Olaf Seibert, KosmoSoft Productions.
  46. X *
  47. X * Notice: The palette and the file requester were written by others.
  48. X * (=RJ= Mical and C. Heath respectively)
  49. X * These packages were adapted to be more generally usable, and to
  50. X * conform more to my own taste.
  51. X * I had to remove a number of bugs from Jim Kents IFF routines.
  52. X * For the 'select' requester I used Stuart Ferguson's blk 2.0 (which I
  53. X * extended to generate code for longint string requesters)
  54. X *
  55. X * Mind you: _I_ didn't mention ShareWare! (though donations are
  56. X * not unwelcome...)
  57. X */
  58. X
  59. XThis software is (C) Copyright 1989 by Olaf Seibert. All Rights Reserved.
  60. X
  61. XThis software is NOT in the public domain. It may not be sold or used for
  62. Xprofit without prior written consent from the author, Olaf Seibert.
  63. X
  64. XConditions for redistribution are:
  65. X
  66. X- This notice must remain included at all times. It may not be modified in
  67. X  any way.
  68. X
  69. X- No charge may be made for distribution above media and transportation
  70. X  costs, except by Fred Fish when included in his library.
  71. X
  72. X- The source and documentation of the program must always be distributed
  73. X  with the binary, unless the distributor of said binary agrees to supply
  74. X  the source and documentation on request, with no expiration date on
  75. X  availability of said source and documentation.
  76. X
  77. X- If any part of this program (source or binary) or its documentation is
  78. X  included in any other software package, either integrated or separately,
  79. X  these redistribution conditions automatically apply to the entire
  80. X  package, unless prior written permission is obtained from the author.
  81. X
  82. X- No claim is made regarding the quality of this software or its
  83. X  documentation. It is supplied purely as-is. The author cannot be held
  84. X  responsible for any damages occurring directly or indirectly from using
  85. X  or not using this program.
  86. X
  87. X/************************************************************************
  88. X* .-------------------------------------------------------------------. *
  89. X* |               --- >>>  AUTHOR INFORMATION  <<< ---                | *
  90. X* `-------------------------------------------------------------------' *
  91. X*=======================================================================*
  92. X*                                 ||                                    *
  93. X*  Study address                  ||   Home address                     *
  94. X*  (might vary)                   ||   (safe way to send fanmail)       *
  95. X*                                 ||                                    *
  96. X*  Olaf Seibert                   ||   Olaf Seibert                     *
  97. X*  Vossendijk 149                 ||   Beek 5                           *
  98. X*  6534 TN  Nijmegen              ||   5815 CS  Merselo                 *
  99. X*  The Netherlands                ||   The Netherlands                  *
  100. X*                                 ||                                    *
  101. X*  International +31-80561045     ||   International +31-4786205        *
  102. X*  or National 080-561045         ||   or National 04786-205            *
  103. X*                                 ||                                    *
  104. X*=======================================================================*
  105. X************************************************************************/
  106. SHAR_EOF
  107. echo "extracting Palette.c"
  108. sed 's/^X//' << \SHAR_EOF > Palette.c
  109. X#define DEBUG
  110. X
  111. X/*
  112. X          MAND.H -- The Constants and Definitions
  113. X         Mandelbrot Self-Squared Dragon Generator
  114. X            For the Commodore Amiga
  115. X             Version 2.01
  116. X
  117. X              Accompanied MAND.C
  118. X
  119. X         Copyright (c) 1985, Robert S. French
  120. X          Placed in the Public Domain
  121. X
  122. X          Vastly Enhanced by =RJ Mical=  1985
  123. X        Manxified by Olaf Seibert  1987
  124. X
  125. XThis program may be distributed free of charge as long as the above
  126. Xnotice is retained.
  127. X
  128. X*/
  129. X
  130. X
  131. X/*-------------------*/
  132. X/* Lots of includes! */
  133. X
  134. X#include <exec/types.h>
  135. X#include <exec/memory.h>
  136. X/* #include <exec/tasks.h> */
  137. X/* #include <exec/libraries.h> */
  138. X/* #include <exec/devices.h> */
  139. X/* #include <devices/keymap.h> */
  140. X/* #include <graphics/copper.h> */
  141. X/* #include <graphics/display.h> */
  142. X/* #include <graphics/gfxbase.h> */
  143. X/* #include <graphics/text.h> */
  144. X/* #include <graphics/view.h> */
  145. X/* #include <graphics/gels.h> */
  146. X/* #include <graphics/regions.h> */
  147. X/* #include <hardware/blit.h> */
  148. X#include <intuition/intuition.h>
  149. X/* #include <intuition/intuitionbase.h> */
  150. X#ifdef DEBUG
  151. X#  include <stdio.h>
  152. X#  undef STATIC /* Empty string */
  153. X#  define STATIC
  154. X#endif
  155. X
  156. X/* #include <libraries/dos.h> */
  157. X
  158. X/* #include <workbench/workbench.h> */
  159. X
  160. X#include "mandel.h"
  161. X
  162. X/*---------------------------------*/
  163. X#define NOT !
  164. X#define FOREVER for(;;)
  165. X
  166. X/* === the definitions for the ColorWindow =============================== */
  167. X#define COLOR_KNOB_BODY     0x1000  /* 0x1111 */
  168. X
  169. X#define COLORWINDOW_WIDTH   208
  170. X#define COLORWINDOW_HEIGHT  101     /* 91 */
  171. X
  172. X#define DEFAULT_WINDOW_LEFT (320 - COLORWINDOW_WIDTH)
  173. X#define DEFAULT_WINDOW_TOP  (200 - COLORWINDOW_HEIGHT)
  174. X
  175. X#define CHARACTER_WIDTH     8
  176. X#define CHARACTER_HEIGHT    8
  177. X
  178. X#define COLOR_BOX_LEFT        7
  179. X#define COLOR_BOX_TOP        16        /* 6 */
  180. X#define COLOR_BOX_RIGHT     (COLOR_BOX_LEFT + 15)
  181. X#define COLOR_BOX_BOTTOM    (COLOR_BOX_TOP + 29)
  182. X#define COLOR_COLOR_TOP     55        /* 45 */
  183. X#define COLOR_COLOR_WIDTH   15
  184. X#define COLOR_COLOR_HEIGHT  10
  185. X#define COLOR_PROP_LEFT     38
  186. X#define COLOR_PROP_TOP        14        /* 4 */
  187. X#define COLOR_PROP_WIDTH    165
  188. X#define COLOR_PROP_HEIGHT   10
  189. X#define COLOR_CLUSTER_LEFT  141
  190. X#define COLOR_CLUSTER_TOP   51        /* 41 */
  191. X#define COLOR_CLUSTER_WIDTH (CHARACTER_WIDTH * 6 + 4)
  192. X#define COLOR_CLUSTER_HEIGHT    9
  193. X#define COLOR_AIN_TOP        (COLOR_BOX_TOP - 2)
  194. X#define COLOR_AIN_LEFT        (COLOR_BOX_RIGHT + 3)
  195. X
  196. X/* GREEN and RED are out of order.  Do you wonder why?    Some day I'll
  197. X * tell you.  =RJ=
  198. X */
  199. X#define COLOR_COPY    MAXCOL
  200. X#define COLOR_RANGE    MAXCOL+1
  201. X#define COLOR_OK    MAXCOL+2
  202. X#define COLOR_CANCEL    MAXCOL+3
  203. X#define COLOR_GREEN    MAXCOL+4
  204. X#define COLOR_RED    MAXCOL+5
  205. X#define COLOR_BLUE    MAXCOL+6
  206. X#define COLOR_AIN_RGB    MAXCOL+7
  207. X#define COLOR_GADGETS_COUNT MAXCOL+8
  208. X
  209. X#define RAIN_MAX_DISTANCE   (MaxColor - 2)
  210. X#define RAIN_MIN_DISTANCE   1
  211. X
  212. X#define ONE_HALF    (0x8000L)
  213. X
  214. X#define SafeFont    Topaz80
  215. X
  216. X/****************************************************************************
  217. X *            MAND6.C - Color Window Data
  218. X *           Mandelbrot Self-Squared Dragon Generator
  219. X *              For the Commodore Amiga
  220. X *               Version 2.01
  221. X *
  222. X *           Copyright (C) 1986, =Robert J. Mical=
  223. X *            Placed in the Public Domain
  224. X *
  225. X *  This program may be distributed free of charge as long as the above
  226. X *  notice is retained.  You may extract any or all information contained
  227. X *  in this file for use in your own programs
  228. X *
  229. X ***************************************************************************/
  230. X
  231. X
  232. X/****************************************************************************
  233. X *
  234. X * Color window template initialization and routines,
  235. X * for colorwindow and cyclewindow
  236. X *
  237. X * Throughout this file, the COLOR_RED and COLOR_GREEN gadgets are in the
  238. X * opposite order you would expect.
  239. X *
  240. X ***************************************************************************/
  241. X
  242. XSTATIC USHORT RGBData[] =
  243. X{
  244. X    0x0000, 0xFC00, 0x6600, 0x6600, 0x7C00, 0x6C00, 0x6600, 0xE300,
  245. X    0x0000, 0x0000, 0x0000, 0x0000, 0x3C00, 0x6600, 0xC000, 0xCE00,
  246. X    0xC600, 0x6600, 0x3E00, 0x0000, 0x0000, 0x0000, 0x0000, 0xFC00,
  247. X    0x6600, 0x6600, 0x7C00, 0x6600, 0x6600, 0xFC00, 0x0000,
  248. X    /* The rest is for the Rainbow Image */
  249. X    ~0x0000, ~0xFC00, ~0x6600, ~0x6600, ~0x7C00, ~0x6C00, ~0x6600, ~0xE300,
  250. X    ~0x0000, ~0x0000, ~0x0000, ~0x0000, ~0x3C00, ~0x6600, ~0xC000, ~0xCE00,
  251. X    ~0xC600, ~0x6600, ~0x3E00, ~0x0000, ~0x0000, ~0x0000, ~0x0000, ~0xFC00,
  252. X    ~0x6600, ~0x6600, ~0x7C00, ~0x6600, ~0x6600, ~0xFC00, ~0x0000
  253. X};
  254. X
  255. X#define MID_RGB_AIN (sizeof(RGBData)/sizeof(RGBData[0])/2)
  256. X
  257. X
  258. XSTATIC struct Image ColorRGBImage =
  259. X{
  260. X    3, 0,
  261. X    8,
  262. X    31,
  263. X    1,
  264. X    &RGBData[0],
  265. X    0x1, 0x0,
  266. X    NULL,
  267. X};
  268. X
  269. XSTATIC struct Image ColorRAINImage =
  270. X{
  271. X    3, 0,
  272. X    8,
  273. X    31,
  274. X    1,
  275. X    &RGBData[MID_RGB_AIN],
  276. X    0x1, 0x0,
  277. X    NULL,
  278. X};
  279. X
  280. XSTATIC SHORT ClusterBorderVectors[] =
  281. X{
  282. X    -1, -1,
  283. X    -1, COLOR_CLUSTER_HEIGHT,
  284. X    COLOR_CLUSTER_WIDTH, COLOR_CLUSTER_HEIGHT,
  285. X    COLOR_CLUSTER_WIDTH, -1,
  286. X    -1, -1,
  287. X};
  288. X
  289. X
  290. XSTATIC struct Border ColorClusterBorder =
  291. X{
  292. X    0, 0,
  293. X    1, 0,
  294. X    JAM1,
  295. X    5,
  296. X    &ClusterBorderVectors[0],
  297. X    NULL,
  298. X};
  299. X
  300. XSTATIC struct IntuiText ColorClusterText[4] =
  301. X{   /* "COPY" */
  302. X    {
  303. X    1, 0,
  304. X    JAM2,
  305. X    2 + CHARACTER_WIDTH, 1,
  306. X    &SafeFont,
  307. X    (UBYTE *) "COPY",
  308. X    NULL,
  309. X    }, /* "RANGE" */
  310. X    {
  311. X    1, 0,
  312. X    JAM2,
  313. X    2 + (CHARACTER_WIDTH >> 1), 1,
  314. X    &SafeFont,
  315. X    (UBYTE *) "RANGE",
  316. X    NULL,
  317. X    }, /* "OK" */
  318. X    {
  319. X    1, 0,
  320. X    JAM2,
  321. X    2 + (CHARACTER_WIDTH << 1), 1,
  322. X    &SafeFont,
  323. X    (UBYTE *) "OK",
  324. X    NULL,
  325. X    }, /* "CANCEL" */
  326. X    {
  327. X    1, 0,
  328. X    JAM2,
  329. X    2, 1,
  330. X    &SafeFont,
  331. X    (UBYTE *) "CANCEL",
  332. X    NULL,
  333. X    },
  334. X};
  335. X
  336. XSTATIC struct IntuiText LessMoreText =
  337. X/* "COPY" "<>" */
  338. X{
  339. X    1, 0,
  340. X    JAM2,
  341. X    2 + (CHARACTER_WIDTH >> 1), 1,
  342. X    &SafeFont,
  343. X    (UBYTE *) " <-> ",
  344. X    NULL,
  345. X};
  346. XSTATIC struct IntuiText MoreLessText =
  347. X{ /* "RANGE" "><" */
  348. X    1, 0,
  349. X    JAM2,
  350. X    2 + (CHARACTER_WIDTH >> 1), 1,
  351. X    &SafeFont,
  352. X    (UBYTE *) " >-< ",
  353. X    NULL,
  354. X};
  355. X
  356. X/* ======================================================================= */
  357. X/* ======================================================================= */
  358. X/* ======================================================================= */
  359. X
  360. X/* RJM anchor */
  361. XSTATIC struct Image ColorPropsImages[3];
  362. XSTATIC struct Image SuperColorImages[MAXCOL];
  363. X
  364. X
  365. XSTATIC struct PropInfo ColorPropsInfos[3] =
  366. X{
  367. X    { /* COLOR_GREEN */
  368. X    AUTOKNOB | FREEHORIZ,
  369. X    0,
  370. X    0,
  371. X    COLOR_KNOB_BODY,
  372. X    0,
  373. X    0, 0, 0, 0, 0, 0,
  374. X    },
  375. X    { /* COLOR_RED */
  376. X    AUTOKNOB | FREEHORIZ,
  377. X    0,
  378. X    0,
  379. X    COLOR_KNOB_BODY,
  380. X    0,
  381. X    0, 0, 0, 0, 0, 0,
  382. X    },
  383. X    { /* COLOR_BLUE */
  384. X    AUTOKNOB | FREEHORIZ,
  385. X    0,
  386. X    0,
  387. X    COLOR_KNOB_BODY,
  388. X    0,
  389. X    0, 0, 0, 0, 0, 0,
  390. X    }
  391. X};
  392. X
  393. X
  394. XSTATIC struct Gadget ColorTemplateGadgets[COLOR_GADGETS_COUNT] =
  395. X{
  396. X    { /* COLOR_00 */
  397. X    NULL,
  398. X    COLOR_BOX_LEFT + ((00 & 0x7) * COLOR_COLOR_WIDTH),
  399. X    COLOR_COLOR_TOP + ((00 >> 3) * COLOR_COLOR_HEIGHT),
  400. X    COLOR_COLOR_WIDTH,
  401. X    COLOR_COLOR_HEIGHT,
  402. X    GADGIMAGE | GADGHNONE,
  403. X    GADGIMMEDIATE,
  404. X    BOOLGADGET,
  405. X    (APTR)&SuperColorImages[00],
  406. X    (APTR)&SuperColorImages[00],
  407. X    NULL,
  408. X    NULL,
  409. X    NULL,
  410. X    00,
  411. X    NULL,
  412. X    },
  413. X    { /* COLOR_01 */
  414. X    &ColorTemplateGadgets[00],
  415. X    COLOR_BOX_LEFT + ((01 & 0x7) * COLOR_COLOR_WIDTH),
  416. X    COLOR_COLOR_TOP + ((01 >> 3) * COLOR_COLOR_HEIGHT),
  417. X    COLOR_COLOR_WIDTH,
  418. X    COLOR_COLOR_HEIGHT,
  419. X    GADGIMAGE | GADGHNONE,
  420. X    GADGIMMEDIATE,
  421. X    BOOLGADGET,
  422. X    (APTR)&SuperColorImages[01],
  423. X    (APTR)&SuperColorImages[01],
  424. X    NULL,
  425. X    NULL,
  426. X    NULL,
  427. X    01,
  428. X    NULL,
  429. X    },
  430. X    { /* COLOR_02 */
  431. X    &ColorTemplateGadgets[01],
  432. X    COLOR_BOX_LEFT + ((02 & 0x7) * COLOR_COLOR_WIDTH),
  433. X    COLOR_COLOR_TOP + ((02 >> 3) * COLOR_COLOR_HEIGHT),
  434. X    COLOR_COLOR_WIDTH,
  435. X    COLOR_COLOR_HEIGHT,
  436. X    GADGIMAGE | GADGHNONE,
  437. X    GADGIMMEDIATE,
  438. X    BOOLGADGET,
  439. X    (APTR)&SuperColorImages[02],
  440. X    (APTR)&SuperColorImages[02],
  441. X    NULL,
  442. X    NULL,
  443. X    NULL,
  444. X    02,
  445. X    NULL,
  446. X    },
  447. X    { /* COLOR_03 */
  448. X    &ColorTemplateGadgets[02],
  449. X    COLOR_BOX_LEFT + ((03 & 0x7) * COLOR_COLOR_WIDTH),
  450. X    COLOR_COLOR_TOP + ((03 >> 3) * COLOR_COLOR_HEIGHT),
  451. X    COLOR_COLOR_WIDTH,
  452. X    COLOR_COLOR_HEIGHT,
  453. X    GADGIMAGE | GADGHNONE,
  454. X    GADGIMMEDIATE,
  455. X    BOOLGADGET,
  456. X    (APTR)&SuperColorImages[03],
  457. X    (APTR)&SuperColorImages[03],
  458. X    NULL,
  459. X    NULL,
  460. X    NULL,
  461. X    03,
  462. X    NULL,
  463. X    },
  464. X    { /* COLOR_04 */
  465. X    &ColorTemplateGadgets[03],
  466. X    COLOR_BOX_LEFT + ((04 & 0x7) * COLOR_COLOR_WIDTH),
  467. X    COLOR_COLOR_TOP + ((04 >> 3) * COLOR_COLOR_HEIGHT),
  468. X    COLOR_COLOR_WIDTH,
  469. X    COLOR_COLOR_HEIGHT,
  470. X    GADGIMAGE | GADGHNONE,
  471. X    GADGIMMEDIATE,
  472. X    BOOLGADGET,
  473. X    (APTR)&SuperColorImages[04],
  474. X    (APTR)&SuperColorImages[04],
  475. X    NULL,
  476. X    NULL,
  477. X    NULL,
  478. X    04,
  479. X    NULL,
  480. X    },
  481. X    { /* COLOR_05 */
  482. X    &ColorTemplateGadgets[04],
  483. X    COLOR_BOX_LEFT + ((05 & 0x7) * COLOR_COLOR_WIDTH),
  484. X    COLOR_COLOR_TOP + ((05 >> 3) * COLOR_COLOR_HEIGHT),
  485. X    COLOR_COLOR_WIDTH,
  486. X    COLOR_COLOR_HEIGHT,
  487. X    GADGIMAGE | GADGHNONE,
  488. X    GADGIMMEDIATE,
  489. X    BOOLGADGET,
  490. X    (APTR)&SuperColorImages[05],
  491. X    (APTR)&SuperColorImages[05],
  492. X    NULL,
  493. X    NULL,
  494. X    NULL,
  495. X    05,
  496. X    NULL,
  497. X    },
  498. X    { /* COLOR_06 */
  499. X    &ColorTemplateGadgets[05],
  500. X    COLOR_BOX_LEFT + ((06 & 0x7) * COLOR_COLOR_WIDTH),
  501. X    COLOR_COLOR_TOP + ((06 >> 3) * COLOR_COLOR_HEIGHT),
  502. X    COLOR_COLOR_WIDTH,
  503. X    COLOR_COLOR_HEIGHT,
  504. X    GADGIMAGE | GADGHNONE,
  505. X    GADGIMMEDIATE,
  506. X    BOOLGADGET,
  507. X    (APTR)&SuperColorImages[06],
  508. X    (APTR)&SuperColorImages[06],
  509. X    NULL,
  510. X    NULL,
  511. X    NULL,
  512. X    06,
  513. X    NULL,
  514. X    },
  515. X    { /* COLOR_07 */
  516. X    &ColorTemplateGadgets[06],
  517. X    COLOR_BOX_LEFT + ((07 & 0x7) * COLOR_COLOR_WIDTH),
  518. X    COLOR_COLOR_TOP + ((07 >> 3) * COLOR_COLOR_HEIGHT),
  519. X    COLOR_COLOR_WIDTH,
  520. X    COLOR_COLOR_HEIGHT,
  521. X    GADGIMAGE | GADGHNONE,
  522. X    GADGIMMEDIATE,
  523. X    BOOLGADGET,
  524. X    (APTR)&SuperColorImages[07],
  525. X    (APTR)&SuperColorImages[07],
  526. X    NULL,
  527. X    NULL,
  528. X    NULL,
  529. X    07,
  530. X    NULL,
  531. X    },
  532. X    { /* COLOR_08 */
  533. X    &ColorTemplateGadgets[07],
  534. X    COLOR_BOX_LEFT + ((8 & 0x7) * COLOR_COLOR_WIDTH),
  535. X    COLOR_COLOR_TOP + ((8 >> 3) * COLOR_COLOR_HEIGHT),
  536. X    COLOR_COLOR_WIDTH,
  537. X    COLOR_COLOR_HEIGHT,
  538. X    GADGIMAGE | GADGHNONE,
  539. X    GADGIMMEDIATE,
  540. X    BOOLGADGET,
  541. X    (APTR)&SuperColorImages[8],
  542. X    (APTR)&SuperColorImages[8],
  543. X    NULL,
  544. X    NULL,
  545. X    NULL,
  546. X    8,
  547. X    NULL,
  548. X    },
  549. X    { /* COLOR_09 */
  550. X    &ColorTemplateGadgets[8],
  551. X    COLOR_BOX_LEFT + ((9 & 0x7) * COLOR_COLOR_WIDTH),
  552. X    COLOR_COLOR_TOP + ((9 >> 3) * COLOR_COLOR_HEIGHT),
  553. X    COLOR_COLOR_WIDTH,
  554. X    COLOR_COLOR_HEIGHT,
  555. X    GADGIMAGE | GADGHNONE,
  556. X    GADGIMMEDIATE,
  557. X    BOOLGADGET,
  558. X    (APTR)&SuperColorImages[9],
  559. X    (APTR)&SuperColorImages[9],
  560. X    NULL,
  561. X    NULL,
  562. X    NULL,
  563. X    9,
  564. X    NULL,
  565. X    },
  566. X    { /* COLOR_10 */
  567. X    &ColorTemplateGadgets[9],
  568. X    COLOR_BOX_LEFT + ((10 & 0x7) * COLOR_COLOR_WIDTH),
  569. X    COLOR_COLOR_TOP + ((10 >> 3) * COLOR_COLOR_HEIGHT),
  570. X    COLOR_COLOR_WIDTH,
  571. X    COLOR_COLOR_HEIGHT,
  572. X    GADGIMAGE | GADGHNONE,
  573. X    GADGIMMEDIATE,
  574. X    BOOLGADGET,
  575. X    (APTR)&SuperColorImages[10],
  576. X    (APTR)&SuperColorImages[10],
  577. X    NULL,
  578. X    NULL,
  579. X    NULL,
  580. X    10,
  581. X    NULL,
  582. X    },
  583. X    { /* COLOR_11 */
  584. X    &ColorTemplateGadgets[10],
  585. X    COLOR_BOX_LEFT + ((11 & 0x7) * COLOR_COLOR_WIDTH),
  586. X    COLOR_COLOR_TOP + ((11 >> 3) * COLOR_COLOR_HEIGHT),
  587. X    COLOR_COLOR_WIDTH,
  588. X    COLOR_COLOR_HEIGHT,
  589. X    GADGIMAGE | GADGHNONE,
  590. X    GADGIMMEDIATE,
  591. X    BOOLGADGET,
  592. X    (APTR)&SuperColorImages[11],
  593. X    (APTR)&SuperColorImages[11],
  594. X    NULL,
  595. X    NULL,
  596. X    NULL,
  597. X    11,
  598. X    NULL,
  599. X    },
  600. X    { /* COLOR_12 */
  601. X    &ColorTemplateGadgets[11],
  602. X    COLOR_BOX_LEFT + ((12 & 0x7) * COLOR_COLOR_WIDTH),
  603. X    COLOR_COLOR_TOP + ((12 >> 3) * COLOR_COLOR_HEIGHT),
  604. X    COLOR_COLOR_WIDTH,
  605. X    COLOR_COLOR_HEIGHT,
  606. X    GADGIMAGE | GADGHNONE,
  607. X    GADGIMMEDIATE,
  608. X    BOOLGADGET,
  609. X    (APTR)&SuperColorImages[12],
  610. X    (APTR)&SuperColorImages[12],
  611. X    NULL,
  612. X    NULL,
  613. X    NULL,
  614. X    12,
  615. X    NULL,
  616. X    },
  617. X    { /* COLOR_13 */
  618. X    &ColorTemplateGadgets[12],
  619. X    COLOR_BOX_LEFT + ((13 & 0x7) * COLOR_COLOR_WIDTH),
  620. X    COLOR_COLOR_TOP + ((13 >> 3) * COLOR_COLOR_HEIGHT),
  621. X    COLOR_COLOR_WIDTH,
  622. X    COLOR_COLOR_HEIGHT,
  623. X    GADGIMAGE | GADGHNONE,
  624. X    GADGIMMEDIATE,
  625. X    BOOLGADGET,
  626. X    (APTR)&SuperColorImages[13],
  627. X    (APTR)&SuperColorImages[13],
  628. X    NULL,
  629. X    NULL,
  630. X    NULL,
  631. X    13,
  632. X    NULL,
  633. X    },
  634. X    { /* COLOR_14 */
  635. X    &ColorTemplateGadgets[13],
  636. X    COLOR_BOX_LEFT + ((14 & 0x7) * COLOR_COLOR_WIDTH),
  637. X    COLOR_COLOR_TOP + ((14 >> 3) * COLOR_COLOR_HEIGHT),
  638. X    COLOR_COLOR_WIDTH,
  639. X    COLOR_COLOR_HEIGHT,
  640. X    GADGIMAGE | GADGHNONE,
  641. X    GADGIMMEDIATE,
  642. X    BOOLGADGET,
  643. X    (APTR)&SuperColorImages[14],
  644. X    (APTR)&SuperColorImages[14],
  645. X    NULL,
  646. X    NULL,
  647. X    NULL,
  648. X    14,
  649. X    NULL,
  650. X    },
  651. X    { /* COLOR_15 */
  652. X    &ColorTemplateGadgets[14],
  653. X    COLOR_BOX_LEFT + ((15 & 0x7) * COLOR_COLOR_WIDTH),
  654. X    COLOR_COLOR_TOP + ((15 >> 3) * COLOR_COLOR_HEIGHT),
  655. X    COLOR_COLOR_WIDTH,
  656. X    COLOR_COLOR_HEIGHT,
  657. X    GADGIMAGE | GADGHNONE,
  658. X    GADGIMMEDIATE,
  659. X    BOOLGADGET,
  660. X    (APTR)&SuperColorImages[15],
  661. X    (APTR)&SuperColorImages[15],
  662. X    NULL,
  663. X    NULL,
  664. X    NULL,
  665. X    15,
  666. X    NULL,
  667. X    },
  668. X    { /* COLOR_16 */
  669. X    &ColorTemplateGadgets[15],
  670. X    COLOR_BOX_LEFT + ((16 & 0x7) * COLOR_COLOR_WIDTH),
  671. X    COLOR_COLOR_TOP + ((16 >> 3) * COLOR_COLOR_HEIGHT),
  672. X    COLOR_COLOR_WIDTH,
  673. X    COLOR_COLOR_HEIGHT,
  674. X    GADGIMAGE | GADGHNONE,
  675. X    GADGIMMEDIATE,
  676. X    BOOLGADGET,
  677. X    (APTR)&SuperColorImages[16],
  678. X    (APTR)&SuperColorImages[16],
  679. X    NULL,
  680. X    NULL,
  681. X    NULL,
  682. X    16,
  683. X    NULL,
  684. X    },
  685. X    { /* COLOR_17 */
  686. X    &ColorTemplateGadgets[16],
  687. X    COLOR_BOX_LEFT + ((17 & 0x7) * COLOR_COLOR_WIDTH),
  688. X    COLOR_COLOR_TOP + ((17 >> 3) * COLOR_COLOR_HEIGHT),
  689. X    COLOR_COLOR_WIDTH,
  690. X    COLOR_COLOR_HEIGHT,
  691. X    GADGIMAGE | GADGHNONE,
  692. X    GADGIMMEDIATE,
  693. X    BOOLGADGET,
  694. X    (APTR)&SuperColorImages[17],
  695. X    (APTR)&SuperColorImages[17],
  696. X    NULL,
  697. X    NULL,
  698. X    NULL,
  699. X    17,
  700. X    NULL,
  701. X    },
  702. X    { /* COLOR_18 */
  703. X    &ColorTemplateGadgets[17],
  704. X    COLOR_BOX_LEFT + ((18 & 0x7) * COLOR_COLOR_WIDTH),
  705. X    COLOR_COLOR_TOP + ((18 >> 3) * COLOR_COLOR_HEIGHT),
  706. X    COLOR_COLOR_WIDTH,
  707. X    COLOR_COLOR_HEIGHT,
  708. X    GADGIMAGE | GADGHNONE,
  709. X    GADGIMMEDIATE,
  710. X    BOOLGADGET,
  711. X    (APTR)&SuperColorImages[18],
  712. X    (APTR)&SuperColorImages[18],
  713. X    NULL,
  714. X    NULL,
  715. X    NULL,
  716. X    18,
  717. X    NULL,
  718. X    },
  719. X    { /* COLOR_19 */
  720. X    &ColorTemplateGadgets[18],
  721. X    COLOR_BOX_LEFT + ((19 & 0x7) * COLOR_COLOR_WIDTH),
  722. X    COLOR_COLOR_TOP + ((19 >> 3) * COLOR_COLOR_HEIGHT),
  723. X    COLOR_COLOR_WIDTH,
  724. X    COLOR_COLOR_HEIGHT,
  725. X    GADGIMAGE | GADGHNONE,
  726. X    GADGIMMEDIATE,
  727. X    BOOLGADGET,
  728. X    (APTR)&SuperColorImages[19],
  729. X    (APTR)&SuperColorImages[19],
  730. X    NULL,
  731. X    NULL,
  732. X    NULL,
  733. X    19,
  734. X    NULL,
  735. X    },
  736. X    { /* COLOR_20 */
  737. X    &ColorTemplateGadgets[19],
  738. X    COLOR_BOX_LEFT + ((20 & 0x7) * COLOR_COLOR_WIDTH),
  739. X    COLOR_COLOR_TOP + ((20 >> 3) * COLOR_COLOR_HEIGHT),
  740. X    COLOR_COLOR_WIDTH,
  741. X    COLOR_COLOR_HEIGHT,
  742. X    GADGIMAGE | GADGHNONE,
  743. X    GADGIMMEDIATE,
  744. X    BOOLGADGET,
  745. X    (APTR)&SuperColorImages[20],
  746. X    (APTR)&SuperColorImages[20],
  747. X    NULL,
  748. X    NULL,
  749. X    NULL,
  750. X    20,
  751. X    NULL,
  752. X    },
  753. X    { /* COLOR_21 */
  754. X    &ColorTemplateGadgets[20],
  755. X    COLOR_BOX_LEFT + ((21 & 0x7) * COLOR_COLOR_WIDTH),
  756. X    COLOR_COLOR_TOP + ((21 >> 3) * COLOR_COLOR_HEIGHT),
  757. X    COLOR_COLOR_WIDTH,
  758. X    COLOR_COLOR_HEIGHT,
  759. X    GADGIMAGE | GADGHNONE,
  760. X    GADGIMMEDIATE,
  761. X    BOOLGADGET,
  762. X    (APTR)&SuperColorImages[21],
  763. X    (APTR)&SuperColorImages[21],
  764. X    NULL,
  765. X    NULL,
  766. X    NULL,
  767. X    21,
  768. X    NULL,
  769. X    },
  770. X    { /* COLOR_22 */
  771. X    &ColorTemplateGadgets[21],
  772. X    COLOR_BOX_LEFT + ((22 & 0x7) * COLOR_COLOR_WIDTH),
  773. X    COLOR_COLOR_TOP + ((22 >> 3) * COLOR_COLOR_HEIGHT),
  774. X    COLOR_COLOR_WIDTH,
  775. X    COLOR_COLOR_HEIGHT,
  776. X    GADGIMAGE | GADGHNONE,
  777. X    GADGIMMEDIATE,
  778. X    BOOLGADGET,
  779. X    (APTR)&SuperColorImages[22],
  780. X    (APTR)&SuperColorImages[22],
  781. X    NULL,
  782. X    NULL,
  783. X    NULL,
  784. X    22,
  785. X    NULL,
  786. X    },
  787. X    { /* COLOR_23 */
  788. X    &ColorTemplateGadgets[22],
  789. X    COLOR_BOX_LEFT + ((23 & 0x7) * COLOR_COLOR_WIDTH),
  790. X    COLOR_COLOR_TOP + ((23 >> 3) * COLOR_COLOR_HEIGHT),
  791. X    COLOR_COLOR_WIDTH,
  792. X    COLOR_COLOR_HEIGHT,
  793. X    GADGIMAGE | GADGHNONE,
  794. X    GADGIMMEDIATE,
  795. X    BOOLGADGET,
  796. X    (APTR)&SuperColorImages[23],
  797. X    (APTR)&SuperColorImages[23],
  798. X    NULL,
  799. X    NULL,
  800. X    NULL,
  801. X    23,
  802. X    NULL,
  803. X    },
  804. X    { /* COLOR_24 */
  805. X    &ColorTemplateGadgets[23],
  806. X    COLOR_BOX_LEFT + ((24 & 0x7) * COLOR_COLOR_WIDTH),
  807. X    COLOR_COLOR_TOP + ((24 >> 3) * COLOR_COLOR_HEIGHT),
  808. X    COLOR_COLOR_WIDTH,
  809. X    COLOR_COLOR_HEIGHT,
  810. X    GADGIMAGE | GADGHNONE,
  811. X    GADGIMMEDIATE,
  812. X    BOOLGADGET,
  813. X    (APTR)&SuperColorImages[24],
  814. X    (APTR)&SuperColorImages[24],
  815. X    NULL,
  816. X    NULL,
  817. X    NULL,
  818. X    24,
  819. X    NULL,
  820. X    },
  821. X    { /* COLOR_25 */
  822. X    &ColorTemplateGadgets[24],
  823. X    COLOR_BOX_LEFT + ((25 & 0x7) * COLOR_COLOR_WIDTH),
  824. X    COLOR_COLOR_TOP + ((25 >> 3) * COLOR_COLOR_HEIGHT),
  825. X    COLOR_COLOR_WIDTH,
  826. X    COLOR_COLOR_HEIGHT,
  827. X    GADGIMAGE | GADGHNONE,
  828. X    GADGIMMEDIATE,
  829. X    BOOLGADGET,
  830. X    (APTR)&SuperColorImages[25],
  831. X    (APTR)&SuperColorImages[25],
  832. X    NULL,
  833. X    NULL,
  834. X    NULL,
  835. X    25,
  836. X    NULL,
  837. X    },
  838. X    { /* COLOR_26 */
  839. X    &ColorTemplateGadgets[25],
  840. X    COLOR_BOX_LEFT + ((26 & 0x7) * COLOR_COLOR_WIDTH),
  841. X    COLOR_COLOR_TOP + ((26 >> 3) * COLOR_COLOR_HEIGHT),
  842. X    COLOR_COLOR_WIDTH,
  843. X    COLOR_COLOR_HEIGHT,
  844. X    GADGIMAGE | GADGHNONE,
  845. X    GADGIMMEDIATE,
  846. X    BOOLGADGET,
  847. X    (APTR)&SuperColorImages[26],
  848. X    (APTR)&SuperColorImages[26],
  849. X    NULL,
  850. X    NULL,
  851. X    NULL,
  852. X    26,
  853. X    NULL,
  854. X    },
  855. X    { /* COLOR_27 */
  856. X    &ColorTemplateGadgets[26],
  857. X    COLOR_BOX_LEFT + ((27 & 0x7) * COLOR_COLOR_WIDTH),
  858. X    COLOR_COLOR_TOP + ((27 >> 3) * COLOR_COLOR_HEIGHT),
  859. X    COLOR_COLOR_WIDTH,
  860. X    COLOR_COLOR_HEIGHT,
  861. X    GADGIMAGE | GADGHNONE,
  862. X    GADGIMMEDIATE,
  863. X    BOOLGADGET,
  864. X    (APTR)&SuperColorImages[27],
  865. X    (APTR)&SuperColorImages[27],
  866. X    NULL,
  867. X    NULL,
  868. X    NULL,
  869. X    27,
  870. X    NULL,
  871. X    },
  872. X    { /* COLOR_28 */
  873. X    &ColorTemplateGadgets[27],
  874. X    COLOR_BOX_LEFT + ((28 & 0x7) * COLOR_COLOR_WIDTH),
  875. X    COLOR_COLOR_TOP + ((28 >> 3) * COLOR_COLOR_HEIGHT),
  876. X    COLOR_COLOR_WIDTH,
  877. X    COLOR_COLOR_HEIGHT,
  878. X    GADGIMAGE | GADGHNONE,
  879. X    GADGIMMEDIATE,
  880. X    BOOLGADGET,
  881. X    (APTR)&SuperColorImages[28],
  882. X    (APTR)&SuperColorImages[28],
  883. X    NULL,
  884. X    NULL,
  885. X    NULL,
  886. X    28,
  887. X    NULL,
  888. X    },
  889. X    { /* COLOR_29 */
  890. X    &ColorTemplateGadgets[28],
  891. X    COLOR_BOX_LEFT + ((29 & 0x7) * COLOR_COLOR_WIDTH),
  892. X    COLOR_COLOR_TOP + ((29 >> 3) * COLOR_COLOR_HEIGHT),
  893. X    COLOR_COLOR_WIDTH,
  894. X    COLOR_COLOR_HEIGHT,
  895. X    GADGIMAGE | GADGHNONE,
  896. X    GADGIMMEDIATE,
  897. X    BOOLGADGET,
  898. X    (APTR)&SuperColorImages[29],
  899. X    (APTR)&SuperColorImages[29],
  900. X    NULL,
  901. X    NULL,
  902. X    NULL,
  903. X    29,
  904. X    NULL,
  905. X    },
  906. X    { /* COLOR_30 */
  907. X    &ColorTemplateGadgets[29],
  908. X    COLOR_BOX_LEFT + ((30 & 0x7) * COLOR_COLOR_WIDTH),
  909. X    COLOR_COLOR_TOP + ((30 >> 3) * COLOR_COLOR_HEIGHT),
  910. X    COLOR_COLOR_WIDTH,
  911. X    COLOR_COLOR_HEIGHT,
  912. X    GADGIMAGE | GADGHNONE,
  913. X    GADGIMMEDIATE,
  914. X    BOOLGADGET,
  915. X    (APTR)&SuperColorImages[30],
  916. X    (APTR)&SuperColorImages[30],
  917. X    NULL,
  918. X    NULL,
  919. X    NULL,
  920. X    30,
  921. X    NULL,
  922. X    },
  923. X    { /* COLOR_31 */
  924. X    &ColorTemplateGadgets[30],
  925. X    COLOR_BOX_LEFT + ((31 & 0x7) * COLOR_COLOR_WIDTH),
  926. X    COLOR_COLOR_TOP + ((31 >> 3) * COLOR_COLOR_HEIGHT),
  927. X    COLOR_COLOR_WIDTH,
  928. X    COLOR_COLOR_HEIGHT,
  929. X    GADGIMAGE | GADGHNONE,
  930. X    GADGIMMEDIATE,
  931. X    BOOLGADGET,
  932. X    (APTR)&SuperColorImages[31],
  933. X    (APTR)&SuperColorImages[31],
  934. X    NULL,
  935. X    NULL,
  936. X    NULL,
  937. X    31,
  938. X    NULL,
  939. X    },
  940. X    { /* COLOR_COPY */
  941. X    &ColorTemplateGadgets[31],
  942. X    COLOR_CLUSTER_LEFT,
  943. X    COLOR_CLUSTER_TOP + (00 * (COLOR_CLUSTER_HEIGHT + 3)),
  944. X    COLOR_CLUSTER_WIDTH,
  945. X    COLOR_CLUSTER_HEIGHT,
  946. X    GADGHCOMP,
  947. X    RELVERIFY,
  948. X    BOOLGADGET,
  949. X    (APTR)&ColorClusterBorder,
  950. X    NULL,
  951. X    &ColorClusterText[00],
  952. X    NULL,
  953. X    NULL,
  954. X    COLOR_COPY,
  955. X    NULL,
  956. X    },
  957. X    { /* COLOR_RANGE */
  958. X    &ColorTemplateGadgets[COLOR_COPY],
  959. X    COLOR_CLUSTER_LEFT,
  960. X    COLOR_CLUSTER_TOP + (01 * (COLOR_CLUSTER_HEIGHT + 3)),
  961. X    COLOR_CLUSTER_WIDTH,
  962. X    COLOR_CLUSTER_HEIGHT,
  963. X    GADGHCOMP,
  964. X    RELVERIFY,
  965. X    BOOLGADGET,
  966. X    (APTR)&ColorClusterBorder,
  967. X    NULL,
  968. X    &ColorClusterText[01],
  969. X    NULL,
  970. X    NULL,
  971. X    COLOR_RANGE,
  972. X    NULL,
  973. X    },
  974. X    { /* COLOR_OK */
  975. X    &ColorTemplateGadgets[COLOR_RANGE],
  976. X    COLOR_CLUSTER_LEFT,
  977. X    COLOR_CLUSTER_TOP + (02 * (COLOR_CLUSTER_HEIGHT + 3)),
  978. X    COLOR_CLUSTER_WIDTH,
  979. X    COLOR_CLUSTER_HEIGHT,
  980. X    GADGHCOMP,
  981. X    RELVERIFY,
  982. X    BOOLGADGET,
  983. X    (APTR)&ColorClusterBorder,
  984. X    NULL,
  985. X    &ColorClusterText[02],
  986. X    NULL,
  987. X    NULL,
  988. X    COLOR_OK,
  989. X    NULL,
  990. X    },
  991. X    { /* COLOR_CANCEL */
  992. X    &ColorTemplateGadgets[COLOR_OK],
  993. X    COLOR_CLUSTER_LEFT,
  994. X    COLOR_CLUSTER_TOP + (03 * (COLOR_CLUSTER_HEIGHT + 3)),
  995. X    COLOR_CLUSTER_WIDTH,
  996. X    COLOR_CLUSTER_HEIGHT,
  997. X    GADGHCOMP,
  998. X    RELVERIFY,
  999. X    BOOLGADGET,
  1000. X    (APTR)&ColorClusterBorder,
  1001. X    NULL,
  1002. X    &ColorClusterText[03],
  1003. X    NULL,
  1004. X    NULL,
  1005. X    COLOR_CANCEL,
  1006. X    NULL,
  1007. X    },
  1008. X    { /* COLOR_GREEN */
  1009. X    &ColorTemplateGadgets[COLOR_CANCEL],
  1010. X    COLOR_PROP_LEFT,
  1011. X    COLOR_PROP_TOP + (01 * (COLOR_PROP_HEIGHT + 1)),
  1012. X    COLOR_PROP_WIDTH,
  1013. X    COLOR_PROP_HEIGHT,
  1014. X    GADGIMAGE | GADGHNONE,    /* GADGHNONE doesn't seem to work! */
  1015. X    FOLLOWMOUSE,        /* The knob still reverses when selected */
  1016. X    PROPGADGET,        /* even if I GADGHIMAGE with 2 of the */
  1017. X    (APTR)&ColorPropsImages[01],    /* same ColorPropsImages */
  1018. X    NULL,
  1019. X    NULL,
  1020. X    NULL,
  1021. X    (APTR)&ColorPropsInfos[01],
  1022. X    COLOR_GREEN,
  1023. X    NULL,
  1024. X    },
  1025. X    { /* COLOR_RED */
  1026. X    &ColorTemplateGadgets[COLOR_GREEN],
  1027. X    COLOR_PROP_LEFT,
  1028. X    COLOR_PROP_TOP + (00 * (COLOR_PROP_HEIGHT + 1)),
  1029. X    COLOR_PROP_WIDTH,
  1030. X    COLOR_PROP_HEIGHT,
  1031. X    GADGIMAGE | GADGHNONE,
  1032. X    FOLLOWMOUSE,
  1033. X    PROPGADGET,
  1034. X    (APTR)&ColorPropsImages[00],
  1035. X    NULL,
  1036. X    NULL,
  1037. X    NULL,
  1038. X    (APTR)&ColorPropsInfos[00],
  1039. X    COLOR_RED,
  1040. X    NULL,
  1041. X    },
  1042. X    { /* COLOR_BLUE */
  1043. X    &ColorTemplateGadgets[COLOR_RED],
  1044. X    COLOR_PROP_LEFT,
  1045. X    COLOR_PROP_TOP + (02 * (COLOR_PROP_HEIGHT + 1)),
  1046. X    COLOR_PROP_WIDTH,
  1047. X    COLOR_PROP_HEIGHT,
  1048. X    GADGIMAGE | GADGHNONE,
  1049. X    FOLLOWMOUSE,
  1050. X    PROPGADGET,
  1051. X    (APTR)&ColorPropsImages[02],
  1052. X    NULL,
  1053. X    NULL,
  1054. X    NULL,
  1055. X    (APTR)&ColorPropsInfos[02],
  1056. X    COLOR_BLUE,
  1057. X    NULL,
  1058. X    },
  1059. X    { /* COLOR_AIN_RGB */
  1060. X    &ColorTemplateGadgets[COLOR_BLUE],
  1061. X    COLOR_AIN_LEFT,
  1062. X    COLOR_AIN_TOP,
  1063. X    CHARACTER_WIDTH + 5,
  1064. X    COLOR_BOX_BOTTOM - COLOR_BOX_TOP + 1,
  1065. X    GADGHIMAGE | GADGIMAGE /*| SELECTED*/,
  1066. X    TOGGLESELECT | RELVERIFY,
  1067. X    BOOLGADGET,
  1068. X    (APTR)&ColorRGBImage,
  1069. X    (APTR)&ColorRAINImage,
  1070. X    NULL,
  1071. X    NULL,
  1072. X    NULL,
  1073. X    COLOR_AIN_RGB,
  1074. X    NULL,
  1075. X    }
  1076. X};
  1077. X
  1078. X
  1079. X
  1080. X/****************************************************************************
  1081. X *               MAND5.C - Color Window
  1082. X *           Mandelbrot Self-Squared Dragon Generator
  1083. X *              For the Commodore Amiga
  1084. X *               Version 2.01
  1085. X *
  1086. X *           Copyright (C) 1986, =Robert J. Mical=
  1087. X *            Placed in the Public Domain
  1088. X *
  1089. X *  This program may be distributed free of charge as long as the above
  1090. X *  notice is retained.  You may extract any or all information contained
  1091. X *  in this file for use in your own programs
  1092. X *
  1093. X ***************************************************************************/
  1094. X
  1095. X
  1096. X/****************************************************************************
  1097. X *
  1098. X * Color initialization and routines
  1099. X *
  1100. X ***************************************************************************/
  1101. X
  1102. X#define COPYCOLOR    1
  1103. X#define RANGE_FIRST  2
  1104. X#define RANGE_SECOND 3
  1105. XSTATIC USHORT ColorMode;
  1106. X
  1107. XSTATIC USHORT SavePalette[MAXCOL];
  1108. X
  1109. X#define COLOR_IDCMP_FLAGS (GADGETDOWN | GADGETUP | MOUSEMOVE)
  1110. X
  1111. X#define MIN(x,y)    (x<y ? x : y)
  1112. X
  1113. X
  1114. XSTATIC struct NewWindow ColorNewWindow =
  1115. X{
  1116. X/*  SHORT LeftEdge, TopEdge;        /* screen dimensions of window */
  1117. X/*  SHORT Width, Height;        /* screen dimensions of window */
  1118. X    DEFAULT_WINDOW_LEFT, DEFAULT_WINDOW_TOP,
  1119. X    COLORWINDOW_WIDTH, COLORWINDOW_HEIGHT,
  1120. X
  1121. X/*  UBYTE DetailPen, BlockPen;        /* for bar/border/gadget rendering */
  1122. X    -1, -1,
  1123. X
  1124. X/*  ULONG IDCMPFlags;            /* User-selected IDCMP flags */
  1125. X    NULL,
  1126. X
  1127. X/*  ULONG Flags;            /* see Window struct for defines */
  1128. X    SMART_REFRESH | NOCAREREFRESH | WINDOWDRAG | WINDOWDEPTH | ACTIVATE,
  1129. X
  1130. X/*  struct Gadget *FirstGadget;*/
  1131. X    NULL,
  1132. X
  1133. X/*  struct Image *CheckMark;*/
  1134. X    NULL,
  1135. X
  1136. X/*  UBYTE *Title;            /* the title text for this window */
  1137. X    (UBYTE *)"Palette \xE0 la =RJ=",    /* a` \340 */
  1138. X
  1139. X/*  struct Screen *Screen;*/
  1140. X    NULL,
  1141. X
  1142. X/*  struct BitMap *BitMap;*/
  1143. X    NULL,
  1144. X
  1145. X/*  SHORT MinWidth, MinHeight;        /* minimums */
  1146. X    0, 0,
  1147. X/*  SHORT MaxWidth, MaxHeight;        /* maximums */
  1148. X    0, 0,
  1149. X
  1150. X/*  USHORT Type;*/
  1151. X    CUSTOMSCREEN,
  1152. X};
  1153. X
  1154. XSTATIC SHORT CurrentColor;
  1155. XSTATIC SHORT RangeFirst;   /* the first selection of the range-color pair */
  1156. XSTATIC SHORT MaxColor;
  1157. XSTATIC BOOL  RainbowMode = FALSE;
  1158. XSHORT RainbowDistance = 0;
  1159. XSHORT RainbowRMax = 1000;
  1160. XSHORT RainbowGMax = 1000;
  1161. XSHORT RainbowBMax = 1000;
  1162. XSHORT RRMax = -1, RGMax = -1, RBMax = -1;
  1163. X
  1164. X
  1165. Xstruct Window *ColorWindow = NULL;
  1166. XSTATIC struct ViewPort *vp;
  1167. X
  1168. X/* ======================================================================= */
  1169. X/* ======================================================================= */
  1170. X/* ======================================================================= */
  1171. X
  1172. XBOOL OpenColorWindow(w)
  1173. Xregister struct Window *w;
  1174. X{
  1175. X    register LONG i;
  1176. X    extern LONG TypeOfMem();
  1177. X
  1178. X    vp = &w->WScreen->ViewPort;
  1179. X    ColorMode = NULL;
  1180. X
  1181. X    if (ColorWindow) {
  1182. X    WindowToFront(ColorWindow);
  1183. X    return TRUE;
  1184. X    }
  1185. X
  1186. X    MaxColor = (1 << w->WScreen->BitMap.Depth) - 1;
  1187. X    if (MaxColor > MAXCOL-1) MaxColor = MAXCOL-1;
  1188. X    for (i = 0; i < MAXCOL; i++) SavePalette[i] = GetRGB4(vp->ColorMap, i);
  1189. X
  1190. X    /* In case we have uninitialised or dumb values */
  1191. X    if (RainbowDistance < RAIN_MIN_DISTANCE ||
  1192. X    RainbowDistance > RAIN_MAX_DISTANCE) {
  1193. X    RainbowDistance = 1 + MaxColor / 3;
  1194. X    goto defaults;
  1195. X    }
  1196. X    if (RainbowRMax > MaxColor ||
  1197. X    RainbowGMax > MaxColor ||
  1198. X    RainbowBMax > MaxColor) {
  1199. Xdefaults:
  1200. X    RainbowRMax = 0;
  1201. X    RainbowGMax = (MaxColor+2) / 3;
  1202. X    RainbowBMax = 2 * (MaxColor+2) / 3;
  1203. X    }
  1204. X
  1205. X    ColorTemplateGadgets[COLOR_AIN_RGB].Flags &= ~SELECTED;
  1206. X    RainbowMode = FALSE;
  1207. X    ColorTemplateGadgets[COLOR_COPY].GadgetText = &ColorClusterText[0];
  1208. X    ColorTemplateGadgets[COLOR_RANGE].GadgetText = &ColorClusterText[1];
  1209. X
  1210. X    /* Make sure the image data is in CHIP memory */
  1211. X    if (TypeOfMem(&RGBData[61]) & MEMF_CHIP) {
  1212. X    ColorRGBImage.ImageData = &RGBData[0];
  1213. X    ColorRAINImage.ImageData = &RGBData[MID_RGB_AIN];
  1214. X    } else {
  1215. X#ifdef DEBUG2
  1216. X    fprintf(stderr, "Allocate CHIP memory (%d bytes) for RGBData\n",
  1217. X        sizeof(RGBData));
  1218. X#endif
  1219. X    if ((ColorRGBImage.ImageData = AllocMem((ULONG)sizeof(RGBData), MEMF_CHIP))
  1220. X        == NULL) return FALSE;
  1221. X    ColorRAINImage.ImageData = ColorRGBImage.ImageData + MID_RGB_AIN;
  1222. X    /* Copy the data */
  1223. X    for (i=0; i< sizeof(RGBData)/sizeof(RGBData[0]); i++)
  1224. X        ColorRGBImage.ImageData[i] = RGBData[i];
  1225. X    }
  1226. X
  1227. X    ColorNewWindow.Screen = w->WScreen;
  1228. X    ColorNewWindow.Type = w->WScreen->Flags & SCREENTYPE;
  1229. X    ColorNewWindow.IDCMPFlags = NULL;
  1230. X    ColorNewWindow.FirstGadget
  1231. X    = &ColorTemplateGadgets[COLOR_GADGETS_COUNT - 1];
  1232. X    ColorTemplateGadgets[COLOR_COPY].NextGadget =
  1233. X    &ColorTemplateGadgets[MaxColor];
  1234. X
  1235. X    if (ColorNewWindow.LeftEdge+ColorNewWindow.Width > w->WScreen->Width) {
  1236. X    ColorNewWindow.LeftEdge = (w->WScreen->Width-ColorNewWindow.Width) / 2;
  1237. X    }
  1238. X    if (ColorNewWindow.TopEdge+ColorNewWindow.Height > w->WScreen->Height) {
  1239. X    ColorNewWindow.TopEdge = (w->WScreen->Height-ColorNewWindow.Height) / 2;
  1240. X    }
  1241. X    CurrentColor = 0;
  1242. X    SetColorProps();
  1243. X    InitSuperColors();
  1244. X
  1245. X    if ((ColorWindow = (struct Window *)OpenWindow(&ColorNewWindow)) == NULL) {
  1246. X    /* fputs("no memory!\n", console); */
  1247. X    return FALSE;
  1248. X    }
  1249. X    ColorWindow->UserPort = w->UserPort;
  1250. X    ModifyIDCMP(ColorWindow, COLOR_IDCMP_FLAGS);
  1251. X
  1252. X    DrawColorWindow();
  1253. X
  1254. X    return TRUE;
  1255. X}
  1256. X
  1257. X
  1258. XVOID CloseColorWindow(accept)
  1259. XBOOL accept;
  1260. X{
  1261. X    /* register LONG i; */
  1262. X
  1263. X    if (ColorWindow == NULL) return;
  1264. X
  1265. X    /* ClearMenuStrip(ColorWindow); */
  1266. X    ColorNewWindow.LeftEdge = ColorWindow->LeftEdge;
  1267. X    ColorNewWindow.TopEdge = ColorWindow->TopEdge;
  1268. X
  1269. X    /* ColorWindow->UserPort = NULL; */
  1270. X    /* CloseWindow(ColorWindow); */
  1271. X    CloseWindowSafely(ColorWindow);
  1272. X    ColorWindow = NULL;
  1273. X
  1274. X    /* Return the allocated CHIP memory */
  1275. X    if (ColorRGBImage.ImageData != &RGBData) {
  1276. X#ifdef DEBUG2
  1277. X    fprintf(stderr,"Freeing CHIP mem of RGBData\n");
  1278. X#endif
  1279. X    FreeMem(ColorRGBImage.ImageData, (ULONG)sizeof(RGBData));
  1280. X    }
  1281. X
  1282. X    if (NOT accept) LoadRGB4(vp, &SavePalette[0], MaxColor + 1L);
  1283. X}
  1284. X
  1285. X
  1286. XSTATIC VOID ColorRange(first, last)
  1287. XSHORT first, last;
  1288. X{
  1289. X    USHORT i;
  1290. X    LONG whole, redfraction, greenfraction, bluefraction;
  1291. X    USHORT rgb;
  1292. X    SHORT firstred, firstgreen, firstblue;
  1293. X    SHORT lastred, lastgreen, lastblue;
  1294. X    SHORT workred, workgreen, workblue;
  1295. X
  1296. X    if (first > last) {
  1297. X    i = first;
  1298. X    first = last;
  1299. X    last = i;
  1300. X    }
  1301. X
  1302. X    /* I need to see a spread of at least two, where there's at least one
  1303. X     * spot between the endpoints, else there's no work to do so I
  1304. X     * might as well just return now.
  1305. X     */
  1306. X    if (first >= last - 1) return;
  1307. X
  1308. X    rgb = GetRGB4(vp->ColorMap, (ULONG) first);
  1309. X    firstred = (rgb >> 8) & 0xF;
  1310. X    firstgreen = (rgb >> 4) & 0xF;
  1311. X    firstblue = (rgb >> 0) & 0xF;
  1312. X
  1313. X    rgb = GetRGB4(vp->ColorMap, (ULONG) last);
  1314. X    lastred = (rgb >> 8) & 0xF;
  1315. X    lastgreen = (rgb >> 4) & 0xF;
  1316. X    lastblue = (rgb >> 0) & 0xF;
  1317. X
  1318. X    whole = ((LONG) lastred - firstred) << 16;
  1319. X    redfraction = whole / (last - first);
  1320. X    whole = ((LONG) lastgreen - firstgreen) << 16;
  1321. X    greenfraction = whole / (last - first);
  1322. X    whole = ((LONG) lastblue - firstblue) << 16;
  1323. X    bluefraction = whole / (last - first);
  1324. X
  1325. X    for (i = first + 1; i < last; i++) {
  1326. X    lastred = (redfraction * (i - first) + ONE_HALF) >> 16;
  1327. X    workred = firstred + lastred;
  1328. X    lastgreen = (greenfraction * (i - first) + ONE_HALF) >> 16;
  1329. X    workgreen = firstgreen + lastgreen;
  1330. X    lastblue = (bluefraction * (i - first) + ONE_HALF) >> 16;
  1331. X    workblue = firstblue + lastblue;
  1332. X    SetRGB4(vp, (ULONG) i, (ULONG) workred, (ULONG) workgreen,
  1333. X        (ULONG) workblue);
  1334. X    }
  1335. X}
  1336. X
  1337. X
  1338. XSTATIC BOOL ColorGadgetGotten(gadget)
  1339. Xstruct Gadget *gadget;
  1340. X{
  1341. X    ULONG rgb, pen;
  1342. X    struct RastPort *RPort;
  1343. X    SHORT green, red, blue;
  1344. X
  1345. X    RPort = ColorWindow->RPort;
  1346. X
  1347. X    /* Have we got a color specifier? */
  1348. X    if (NOT RainbowMode && gadget->GadgetID <= MaxColor) {
  1349. X    /* Yes, it's a color gadget.  Set this pen number */
  1350. X    pen = gadget->GadgetID;
  1351. X    /* First, were we in COPY COLOR mode? */
  1352. X    if (ColorMode == COPYCOLOR) {
  1353. X        /* Ok, copy old color here first! */
  1354. X        rgb = GetRGB4(vp->ColorMap, (ULONG) CurrentColor);
  1355. X        SetRGB4(vp, pen, rgb >> 8, rgb >> 4, rgb);
  1356. X        ColorMode = NULL;
  1357. X    }
  1358. X    else if (ColorMode == RANGE_FIRST) {
  1359. X        ColorMode = RANGE_SECOND;
  1360. X        RangeFirst = pen;
  1361. X    }
  1362. X    else if (ColorMode == RANGE_SECOND) {
  1363. X        ColorMode = NULL;
  1364. X        ColorRange(RangeFirst, (SHORT) pen);
  1365. X    }
  1366. X    CurrentColor = pen;
  1367. X    ColorRectFill(RPort, (SHORT) pen);
  1368. X
  1369. X    red = RemoveGadget(ColorWindow, &ColorTemplateGadgets[COLOR_RED]);
  1370. X    green = RemoveGadget(ColorWindow,&ColorTemplateGadgets[COLOR_GREEN]);
  1371. X    blue = RemoveGadget(ColorWindow, &ColorTemplateGadgets[COLOR_BLUE]);
  1372. X    SetColorProps();
  1373. X    AddGadget(ColorWindow, &ColorTemplateGadgets[COLOR_BLUE],
  1374. X        (LONG) blue);
  1375. X    AddGadget(ColorWindow, &ColorTemplateGadgets[COLOR_GREEN],
  1376. X        (LONG) green);
  1377. X    AddGadget(ColorWindow, &ColorTemplateGadgets[COLOR_RED],
  1378. X        (LONG) red);
  1379. X    RefreshGadgets(&ColorTemplateGadgets[COLOR_GADGETS_COUNT - 1],
  1380. X        ColorWindow);
  1381. X    }
  1382. X
  1383. X    else if (RainbowMode && gadget->GadgetID <= MaxColor) {
  1384. X    /* Yes, it's a color gadget.  Get its old color back. */
  1385. X    pen = gadget->GadgetID;
  1386. X    red   = (SavePalette[pen] & 0xF00) >> 8;
  1387. X    green = (SavePalette[pen] & 0x0F0) >> 4;
  1388. X    blue  = (SavePalette[pen] & 0x00F) >> 0;
  1389. X    SetRGB4(vp, pen, (LONG) red, (LONG) green, (LONG) blue);
  1390. X    }
  1391. X
  1392. X    else switch (gadget->GadgetID) {
  1393. X    case COLOR_OK:
  1394. X    CloseColorWindow((BOOL) TRUE);
  1395. X    return FALSE;
  1396. X    break;
  1397. X    case COLOR_CANCEL:
  1398. X    CloseColorWindow((BOOL) FALSE);
  1399. X    return FALSE;
  1400. X    break;
  1401. X    case COLOR_COPY:
  1402. X    if (RainbowMode) { /* Gadget now has an alternate meaning */
  1403. X        if (++RainbowDistance > RAIN_MAX_DISTANCE)
  1404. X        RainbowDistance = RAIN_MAX_DISTANCE;
  1405. X        RRMax = -2;     /* Force color updating */
  1406. X        ModifyColors();
  1407. X    }
  1408. X    else ColorMode = COPYCOLOR;
  1409. X    break;
  1410. X    case COLOR_RANGE:
  1411. X    if (RainbowMode) {
  1412. X        if (--RainbowDistance < RAIN_MIN_DISTANCE)
  1413. X        RainbowDistance = RAIN_MIN_DISTANCE;
  1414. X        RRMax = -3;     /* Force color updating */
  1415. X        ModifyColors();
  1416. X    }
  1417. X    else ColorMode = RANGE_FIRST;
  1418. X    break;
  1419. X    case COLOR_AIN_RGB:
  1420. X    /* blue = RemoveGList(ColorWindow,
  1421. X        &ColorTemplateGadgets[COLOR_BLUE], 3L); */
  1422. X    red = RemoveGadget(ColorWindow, &ColorTemplateGadgets[COLOR_RED]);
  1423. X    green = RemoveGadget(ColorWindow,&ColorTemplateGadgets[COLOR_GREEN]);
  1424. X    blue = RemoveGadget(ColorWindow, &ColorTemplateGadgets[COLOR_BLUE]);
  1425. X    if (gadget->Flags & SELECTED) { /* We want Rainbow Mode */
  1426. X        RainbowMode = TRUE;
  1427. X        ColorTemplateGadgets[COLOR_COPY].GadgetText = &LessMoreText;
  1428. X        ColorTemplateGadgets[COLOR_RANGE].GadgetText = &MoreLessText;
  1429. X        RRMax = -4;     /* Force color updating */
  1430. X        SetColorProps();
  1431. X        ModifyColors();
  1432. X    } else { /* We want our normal RGB mode back */
  1433. X        RainbowMode = FALSE;
  1434. X        ColorTemplateGadgets[COLOR_COPY].GadgetText =
  1435. X        &ColorClusterText[0];
  1436. X        ColorTemplateGadgets[COLOR_RANGE].GadgetText =
  1437. X        &ColorClusterText[1];
  1438. X        SetColorProps();
  1439. X    }
  1440. X    /* AddGList(ColorWindow, &ColorTemplateGadgets[COLOR_BLUE],
  1441. X        (LONG) blue, 3L, NULL); */
  1442. X    AddGadget(ColorWindow, &ColorTemplateGadgets[COLOR_BLUE],
  1443. X        (LONG) blue);
  1444. X    AddGadget(ColorWindow, &ColorTemplateGadgets[COLOR_GREEN],
  1445. X        (LONG) green);
  1446. X    AddGadget(ColorWindow, &ColorTemplateGadgets[COLOR_RED],
  1447. X        (LONG) red);
  1448. X    RefreshGadgets(&ColorTemplateGadgets[COLOR_GADGETS_COUNT - 1],
  1449. X        ColorWindow);
  1450. X    break;
  1451. X
  1452. X    }
  1453. X    return TRUE;
  1454. X}
  1455. X
  1456. XSHORT mod(a,b)
  1457. XSHORT a,b;
  1458. X{
  1459. X    if (a < 0)  return a+b;
  1460. X    if (a >= b) return a-b;
  1461. X    return a;
  1462. X}
  1463. X
  1464. XModifyColors()
  1465. X{
  1466. X    ULONG newred, newgreen, newblue;
  1467. X
  1468. X    newred = ((struct PropInfo *)
  1469. X    ColorTemplateGadgets[COLOR_RED].SpecialInfo)->HorizPot;
  1470. X    newgreen = ((struct PropInfo *)
  1471. X    ColorTemplateGadgets[COLOR_GREEN].SpecialInfo)->HorizPot;
  1472. X    newblue = ((struct PropInfo *)
  1473. X    ColorTemplateGadgets[COLOR_BLUE].SpecialInfo)->HorizPot;
  1474. X
  1475. X    if (RainbowMode) {
  1476. X    USHORT NewPalette[MAXCOL];
  1477. X    SHORT i;
  1478. X    SHORT distance;
  1479. X
  1480. X    for (i=0; i<MAXCOL; i++)    NewPalette[i] = 0;
  1481. X    NewPalette[0] = GetRGB4(vp->ColorMap, 0L);
  1482. X    RainbowRMax = (newred * MaxColor + ONE_HALF) >> 16;
  1483. X    RainbowGMax = (newgreen * MaxColor + ONE_HALF) >> 16;
  1484. X    RainbowBMax = (newblue * MaxColor + ONE_HALF) >> 16;
  1485. X
  1486. X    if (RainbowRMax == RRMax && RainbowGMax == RGMax &&
  1487. X        RainbowBMax == RBMax) return;
  1488. X
  1489. X#ifdef DEBUG2
  1490. X    fprintf(stderr, "ModifyColors: d/r/g/b = %d %d %d %d\n",
  1491. X        RainbowDistance,
  1492. X        RainbowRMax,
  1493. X        RainbowGMax,
  1494. X        RainbowBMax);
  1495. X#endif
  1496. X
  1497. X    RRMax = RainbowRMax;
  1498. X    RGMax = RainbowGMax;
  1499. X    RBMax = RainbowBMax;
  1500. X
  1501. X    for (distance=0; distance < RainbowDistance; distance++) {
  1502. X        i = 15 - (16.0 * ((float) distance / RainbowDistance)) + 0.5;
  1503. X        /* i = 15 - ((distance<<16)/RainbowDistance + (1<<11)) >> 12; */
  1504. X        if (i < 0)  i = 0;
  1505. X
  1506. X        NewPalette[1 + mod(RainbowBMax + distance, MaxColor)] |= i;
  1507. X        NewPalette[1 + mod(RainbowBMax - distance, MaxColor)] |= i;
  1508. X        i <<= 4;
  1509. X        NewPalette[1 + mod(RainbowGMax + distance, MaxColor)] |= i;
  1510. X        NewPalette[1 + mod(RainbowGMax - distance, MaxColor)] |= i;
  1511. X        i <<= 4;
  1512. X        NewPalette[1 + mod(RainbowRMax + distance, MaxColor)] |= i;
  1513. X        NewPalette[1 + mod(RainbowRMax - distance, MaxColor)] |= i;
  1514. X    }
  1515. X
  1516. X    LoadRGB4(vp, &NewPalette[0], MaxColor + 1L);
  1517. X    } else { /* Normal RGB mode */
  1518. X    SetRGB4(vp, (ULONG) CurrentColor, newred >> 12, newgreen >> 12,
  1519. X        newblue >> 12);
  1520. X    }
  1521. X}
  1522. X
  1523. X
  1524. X
  1525. XSTATIC DrawColorWindow()
  1526. X{
  1527. X    struct RastPort *RPort;
  1528. X
  1529. X    RPort = ColorWindow->RPort;
  1530. X
  1531. X    ColorRectFill(RPort, CurrentColor);
  1532. X    SetAPen(RPort, 1L);
  1533. X    SetDrMd(RPort, JAM1);
  1534. X
  1535. X    /* Border around ColorBox */
  1536. X    RectDraw(RPort, (SHORT) (COLOR_BOX_LEFT-2), (SHORT) (COLOR_BOX_TOP-2),
  1537. X    (SHORT) (COLOR_BOX_RIGHT+2), (SHORT) (COLOR_BOX_BOTTOM+2));
  1538. X    /* Border around ColorTemplateGadgets */
  1539. X    RectDraw(RPort, (SHORT) (COLOR_BOX_LEFT-2), (SHORT) (COLOR_COLOR_TOP-2),
  1540. X    (SHORT) (COLOR_BOX_LEFT+((MIN(MaxColor+1,8)*COLOR_COLOR_WIDTH)+1)),
  1541. X    (SHORT) (COLOR_COLOR_TOP+(((MaxColor+8)/8)*COLOR_COLOR_HEIGHT)+1));
  1542. X}
  1543. X
  1544. X
  1545. X
  1546. XSTATIC SetColorProps()
  1547. X{
  1548. X    ULONG rgb, red, green, blue;
  1549. X
  1550. X    if (RainbowMode) {
  1551. X    red   = ((ULONG) RainbowRMax << 16) / MaxColor;
  1552. X    green = ((ULONG) RainbowGMax << 16) / MaxColor;
  1553. X    blue  = ((ULONG) RainbowBMax << 16) / MaxColor;
  1554. X    } else {
  1555. X    rgb = GetRGB4(vp->ColorMap, (ULONG) CurrentColor);
  1556. X    red   = (rgb & 0xF00) << 4  | (rgb & 0xF00) << 0;
  1557. X    green = (rgb & 0x0F0) << 8  | (rgb & 0x0F0) << 4;
  1558. X    blue  = (rgb & 0x00F) << 12 | (rgb & 0x00F) << 8;
  1559. X    }
  1560. X
  1561. X    ((struct PropInfo *)ColorTemplateGadgets[COLOR_RED]
  1562. X    .SpecialInfo)->HorizPot
  1563. X    = red;
  1564. X    ((struct PropInfo *)ColorTemplateGadgets[COLOR_GREEN]
  1565. X    .SpecialInfo)->HorizPot
  1566. X    = green;
  1567. X    ((struct PropInfo *)ColorTemplateGadgets[COLOR_BLUE]
  1568. X    .SpecialInfo)->HorizPot
  1569. X    = blue;
  1570. X}
  1571. X
  1572. X
  1573. XSTATIC ColorRectFill(RPort, pen)
  1574. Xstruct RastPort *RPort;
  1575. XSHORT pen;
  1576. X{
  1577. X    SetAPen(RPort, (ULONG) pen);
  1578. X    SetDrMd(RPort, (ULONG) JAM2);
  1579. X    WaitBOVP(vp);
  1580. X    RectFill(RPort, (ULONG) COLOR_BOX_LEFT, (ULONG) COLOR_BOX_TOP,
  1581. X    (ULONG) COLOR_BOX_RIGHT, (ULONG) COLOR_BOX_BOTTOM);
  1582. X}
  1583. X
  1584. X#ifdef notdef
  1585. X
  1586. Xvoid Palette(w) /* DoColorWindow() */
  1587. Xstruct Window *w;
  1588. X{
  1589. X    struct IntuiMessage *message;
  1590. X    ULONG class;
  1591. X    struct Gadget *gadget;
  1592. X
  1593. X    if (NOT OpenColorWindow(w)) return;
  1594. X
  1595. X    FOREVER {
  1596. X    Wait( 1L << ColorWindow->UserPort->mp_SigBit );
  1597. X    while (message = (struct IntuiMessage *)
  1598. X        GetMsg(ColorWindow->UserPort)) {
  1599. X        class = message->Class;
  1600. X        gadget = (struct Gadget *)(message->IAddress);
  1601. X        ReplyMsg(message);
  1602. X
  1603. X        switch (class) {
  1604. X        case GADGETDOWN:
  1605. X        case GADGETUP:
  1606. X        if (ColorGadgetGotten(gadget) == FALSE) return;
  1607. X        break;
  1608. X        case MOUSEMOVE:
  1609. X        ModifyColors();
  1610. X        break;
  1611. X        }
  1612. X    }
  1613. X    }
  1614. X}
  1615. X
  1616. X#else
  1617. X
  1618. Xvoid HandleColorWindow(message)
  1619. Xstruct IntuiMessage *message;
  1620. X{
  1621. X    ULONG class;
  1622. X    struct Gadget *gadget;
  1623. X
  1624. X    class = message->Class;
  1625. X    gadget = (struct Gadget *)(message->IAddress);
  1626. X    ReplyMsg(message);
  1627. X
  1628. X    if (ColorWindow == NULL)
  1629. X    return;
  1630. X
  1631. X    switch (class) {
  1632. X    case GADGETDOWN:
  1633. X    case GADGETUP:
  1634. X    if (ColorGadgetGotten(gadget) == FALSE) return;
  1635. X    break;
  1636. X    case MOUSEMOVE:
  1637. X    ModifyColors();
  1638. X    break;
  1639. X    }
  1640. X}
  1641. X
  1642. X#endif
  1643. X
  1644. XSTATIC InitSuperColors()
  1645. X{
  1646. X    SHORT i;
  1647. X
  1648. X    /* OK, initialize those Super Color Gadgets! */
  1649. X    for (i = 0; i < MAXCOL; i++)
  1650. X    {
  1651. X    SuperColorImages[i].LeftEdge = 0;
  1652. X    SuperColorImages[i].TopEdge = 0;
  1653. X    SuperColorImages[i].Width = COLOR_COLOR_WIDTH;
  1654. X    SuperColorImages[i].Height = 10;
  1655. X    SuperColorImages[i].Depth = 0;
  1656. X    SuperColorImages[i].ImageData = NULL;
  1657. X    SuperColorImages[i].PlanePick = 0;
  1658. X    SuperColorImages[i].PlaneOnOff = i;
  1659. X    SuperColorImages[i].NextImage = NULL;
  1660. X    }
  1661. X}
  1662. SHAR_EOF
  1663. echo "extracting Select.blk"
  1664. sed 's/^X//' << \SHAR_EOF > Select.blk
  1665. X/*
  1666. X *  Select requester structure described in blk 2.0.
  1667. X */
  1668. X
  1669. X#define hbox(color, space, contents) \
  1670. X        (h (| 1 color) (v (- 1 color)  (b 0 space) (h (b space 0) \
  1671. X        contents \
  1672. X        (b space 0)) (b 0 space) (- 1 color) ) (| 1 color))
  1673. X
  1674. X#define tighthbox(color, contents) \
  1675. X        (h f (| 1 color) (v (- 1 color) \
  1676. X        (h contents) \
  1677. X        (- 1 color)) (| 1 color) f )
  1678. X
  1679. X#define stringgad(num) \
  1680. X        (h (t"  11") (b 10 0) (t"----"):num)
  1681. X
  1682. X
  1683. Xselect 3 2 1
  1684. X
  1685. X(v
  1686. X    (b 0 8)
  1687. X    (h f (b 10 0) (t"Select pen numbers per depth") f (b 10 0) )
  1688. X    (b 0 10)
  1689. X    (h
  1690. X    (b 10 0)
  1691. X    hbox(0, 3,
  1692. X        (v
  1693. X        stringgad(10) (b 0 2)
  1694. X        stringgad(11) (b 0 2)
  1695. X        stringgad(12) (b 0 2)
  1696. X        stringgad(13) (b 0 2)
  1697. X        stringgad(14) (b 0 2)
  1698. X        stringgad(15) (b 0 2)
  1699. X        stringgad(16) (b 0 2)
  1700. X        stringgad(17) (b 0 2)
  1701. X        stringgad(18) (b 0 2)
  1702. X        stringgad(19)
  1703. X        )
  1704. X    )
  1705. X    (b 10 0)
  1706. X    hbox(0, 3,
  1707. X        (v
  1708. X        stringgad(20) (b 0 2)
  1709. X        stringgad(21) (b 0 2)
  1710. X        stringgad(22) (b 0 2)
  1711. X        stringgad(23) (b 0 2)
  1712. X        stringgad(24) (b 0 2)
  1713. X        stringgad(25) (b 0 2)
  1714. X        stringgad(26) (b 0 2)
  1715. X        stringgad(27) (b 0 2)
  1716. X        stringgad(28) (b 0 2)
  1717. X        stringgad(29)
  1718. X        )
  1719. X    )
  1720. X    (b 8 0)
  1721. X    (v
  1722. X        (h  f
  1723. X        hbox(3, 1, hbox(0, 1, (b 12 68):1 ))
  1724. X        f
  1725. X        )
  1726. X        f
  1727. X        hbox(3, 1, hbox(0, 2, (t" OK ")):3 )
  1728. X    )
  1729. X    (b 10 0)
  1730. X    f
  1731. X    )
  1732. X    (b 0 8)
  1733. X)
  1734. X
  1735. X1 pv ,0 2700 :"PROPGADGETID" "v"
  1736. X3         :"POSGADGETID" "ve"
  1737. X
  1738. X10 s :"VALUEGADGETID+ 0" "vl"
  1739. X11 s :"VALUEGADGETID+ 1" "vl"
  1740. X12 s :"VALUEGADGETID+ 2" "vl"
  1741. X13 s :"VALUEGADGETID+ 3" "vl"
  1742. X14 s :"VALUEGADGETID+ 4" "vl"
  1743. X15 s :"VALUEGADGETID+ 5" "vl"
  1744. X16 s :"VALUEGADGETID+ 6" "vl"
  1745. X17 s :"VALUEGADGETID+ 7" "vl"
  1746. X18 s :"VALUEGADGETID+ 8" "vl"
  1747. X19 s :"VALUEGADGETID+ 9" "vl"
  1748. X20 s :"VALUEGADGETID+10" "vl"
  1749. X21 s :"VALUEGADGETID+11" "vl"
  1750. X22 s :"VALUEGADGETID+12" "vl"
  1751. X23 s :"VALUEGADGETID+13" "vl"
  1752. X24 s :"VALUEGADGETID+14" "vl"
  1753. X25 s :"VALUEGADGETID+15" "vl"
  1754. X26 s :"VALUEGADGETID+16" "vl"
  1755. X27 s :"VALUEGADGETID+17" "vl"
  1756. X28 s :"VALUEGADGETID+18" "vl"
  1757. X29 s :"VALUEGADGETID+19" "vl"
  1758. SHAR_EOF
  1759. echo "extracting Select.c"
  1760. sed 's/^X//' << \SHAR_EOF > Select.c
  1761. X/*
  1762. X * M A N D E L B R O T     C O N S T R U C T I O N   S E T
  1763. X *
  1764. X * (C) Copyright 1989 by Olaf Seibert.
  1765. X * Mandel may be freely distributed. See file 'doc/Notice' for details.
  1766. X *
  1767. X * Select() requester, as generated by blk 2.0 (by Stuart Ferguson).
  1768. X * Necessary changes to the generated file:
  1769. X * - delete definition of select_nbuf[][]
  1770. X */
  1771. X
  1772. X#include <exec/types.h>
  1773. X#include <intuition/intuition.h>
  1774. X#include "mandel.h"
  1775. X#ifdef DEBUG
  1776. X#   include <stdio.h>
  1777. X#   undef STATIC
  1778. X#   define STATIC   /* EMPTY */
  1779. X#endif
  1780. X
  1781. X#define NUMCHR        5
  1782. X
  1783. X/*extern UBYTE Buffer[5][20];    /* We want to re-use it for the
  1784. X                 * string gadgets here.
  1785. X                 */
  1786. Xextern UBYTE Buffer[20][5];
  1787. XUBYTE undo[NUMCHR];
  1788. X#define select_nbuf Buffer
  1789. X
  1790. X#define ta        Topaz80
  1791. X#define ITXT_BPEN   REQ_BF
  1792. X#define ITXT_DRMD   JAM2
  1793. X#define BRD_DRMD    JAM1
  1794. X#define REQ_LE        0
  1795. X#define REQ_TE        0
  1796. X#define REQ_FLG     0
  1797. X#define REQ_BF        1
  1798. X
  1799. X#define PROPGADGETID    (NEGGADGETID+3)
  1800. X#define VALUEGADGETID    (NEGGADGETID+10)
  1801. X
  1802. X#include "select.req"
  1803. X
  1804. X#define FIRST_STRGAD        0
  1805. X#define FIRST_SINFO        0
  1806. X#define FIRST_ITEXT        1
  1807. X#define NUMVALUES        20
  1808. X#define MAXVAL            (MAXDEPTH - NUMVALUES)
  1809. X
  1810. Xvoid fillin(from, window)
  1811. Xregister int from;
  1812. Xregister struct Window *window;
  1813. X{
  1814. X    register int to = from+20;
  1815. X    register int i;
  1816. X
  1817. X    if (window) {
  1818. X    RemoveGList(window, &select_gad[FIRST_STRGAD], 20L);
  1819. X    }
  1820. X
  1821. X    for (i = 0; from < to; from++, i++) {
  1822. X    sprintf(select_txt[FIRST_ITEXT+i].IText, "%4d", from);
  1823. X    sprintf(select_sinfo[FIRST_SINFO+i].Buffer, "%d", (int)PenTable[from]);
  1824. X    select_sinfo[FIRST_SINFO+i].LongInt = PenTable[from];
  1825. X    }
  1826. X
  1827. X    if (window) {
  1828. X    AddGList(window, &select_gad[FIRST_STRGAD], 0L, 20L, &select_req);
  1829. X    RefreshGList(&select_gad[FIRST_STRGAD], window, &select_req, 20L);
  1830. X    PrintIText(select_req.ReqLayer->rp, &select_txt[FIRST_ITEXT], 0L, 0L);
  1831. X    }
  1832. X}
  1833. X
  1834. Xvoid Select()
  1835. X{
  1836. X    register int ID;
  1837. X    register int base;
  1838. X    register struct Window *window = NULL;
  1839. X    int value;
  1840. X
  1841. X    base = (select_pinfo[0].VertPot * (long) MAXVAL + 0x8000) >> 16;
  1842. X    fillin(base, NULL);
  1843. X    select_pinfo[0].VertBody = (MAXBODY * NUMVALUES) / (5*MAXVAL/4);
  1844. X
  1845. X    window = MyRequest(&select_req, MainWindow);
  1846. X
  1847. X    do {
  1848. X    ID = WaitMyRequest(window);
  1849. X    switch(ID) {
  1850. X    case POSGADGETID:    /* OK */
  1851. X        break;
  1852. X    case PROPGADGETID:
  1853. X        base = (select_pinfo[0].VertPot * (long) MAXVAL + 0x8000) >> 16;
  1854. X        fillin(base, window);
  1855. X        break;
  1856. X    default:        /* some value */
  1857. X        ID -= VALUEGADGETID;
  1858. X        value = select_sinfo[FIRST_SINFO+ID].LongInt;
  1859. X        if (value >= 0 && value < NumColors)
  1860. X        PenTable[base + ID] = value;
  1861. X        else
  1862. X        DisplayBeep(MandelScreen);
  1863. X    }
  1864. X    } while (ID != POSGADGETID);
  1865. X
  1866. X    EndMyRequest(&select_req, window, MainWindow);
  1867. X}
  1868. SHAR_EOF
  1869. echo "extracting Select.req"
  1870. sed 's/^X//' << \SHAR_EOF > Select.req
  1871. X#ifndef BRD_DRMD
  1872. X# define BRD_DRMD JAM1
  1873. X#endif
  1874. X
  1875. X#ifndef ITXT_BPEN
  1876. X# define ITXT_BPEN 0
  1877. X#endif
  1878. X
  1879. X#ifndef ITXT_DRMD
  1880. X# define ITXT_DRMD JAM1
  1881. X#endif
  1882. X
  1883. X#ifndef REQ_LE
  1884. X# define REQ_LE 0
  1885. X#endif
  1886. X
  1887. X#ifndef REQ_TE
  1888. X# define REQ_TE 0
  1889. X#endif
  1890. X
  1891. X#ifndef REQ_FLG
  1892. X# define REQ_FLG 0
  1893. X#endif
  1894. X
  1895. Xstatic struct StringInfo select_sinfo[] = {
  1896. X    {&select_nbuf[0][0],undo,0,NUMCHR,0},
  1897. X    {&select_nbuf[1][0],undo,0,NUMCHR,0},
  1898. X    {&select_nbuf[2][0],undo,0,NUMCHR,0},
  1899. X    {&select_nbuf[3][0],undo,0,NUMCHR,0},
  1900. X    {&select_nbuf[4][0],undo,0,NUMCHR,0},
  1901. X    {&select_nbuf[5][0],undo,0,NUMCHR,0},
  1902. X    {&select_nbuf[6][0],undo,0,NUMCHR,0},
  1903. X    {&select_nbuf[7][0],undo,0,NUMCHR,0},
  1904. X    {&select_nbuf[8][0],undo,0,NUMCHR,0},
  1905. X    {&select_nbuf[9][0],undo,0,NUMCHR,0},
  1906. X    {&select_nbuf[10][0],undo,0,NUMCHR,0},
  1907. X    {&select_nbuf[11][0],undo,0,NUMCHR,0},
  1908. X    {&select_nbuf[12][0],undo,0,NUMCHR,0},
  1909. X    {&select_nbuf[13][0],undo,0,NUMCHR,0},
  1910. X    {&select_nbuf[14][0],undo,0,NUMCHR,0},
  1911. X    {&select_nbuf[15][0],undo,0,NUMCHR,0},
  1912. X    {&select_nbuf[16][0],undo,0,NUMCHR,0},
  1913. X    {&select_nbuf[17][0],undo,0,NUMCHR,0},
  1914. X    {&select_nbuf[18][0],undo,0,NUMCHR,0},
  1915. X    {&select_nbuf[19][0],undo,0,NUMCHR,0}
  1916. X};
  1917. X
  1918. Xstatic struct Image select_pimg[1];
  1919. X
  1920. Xstatic struct PropInfo select_pinfo[] = {
  1921. X    {13,32768,0,32768,2700}
  1922. X};
  1923. X
  1924. Xstatic struct Gadget select_gad[] = {
  1925. X    {&select_gad[1],56,30,32,8,0,2049,4100,NULL,
  1926. X     NULL,NULL,0,(APTR)&select_sinfo[0],VALUEGADGETID+ 0},
  1927. X    {&select_gad[2],56,40,32,8,0,2049,4100,NULL,
  1928. X     NULL,NULL,0,(APTR)&select_sinfo[1],VALUEGADGETID+ 1},
  1929. X    {&select_gad[3],56,50,32,8,0,2049,4100,NULL,
  1930. X     NULL,NULL,0,(APTR)&select_sinfo[2],VALUEGADGETID+ 2},
  1931. X    {&select_gad[4],56,60,32,8,0,2049,4100,NULL,
  1932. X     NULL,NULL,0,(APTR)&select_sinfo[3],VALUEGADGETID+ 3},
  1933. X    {&select_gad[5],56,70,32,8,0,2049,4100,NULL,
  1934. X     NULL,NULL,0,(APTR)&select_sinfo[4],VALUEGADGETID+ 4},
  1935. X    {&select_gad[6],56,80,32,8,0,2049,4100,NULL,
  1936. X     NULL,NULL,0,(APTR)&select_sinfo[5],VALUEGADGETID+ 5},
  1937. X    {&select_gad[7],56,90,32,8,0,2049,4100,NULL,
  1938. X     NULL,NULL,0,(APTR)&select_sinfo[6],VALUEGADGETID+ 6},
  1939. X    {&select_gad[8],56,100,32,8,0,2049,4100,NULL,
  1940. X     NULL,NULL,0,(APTR)&select_sinfo[7],VALUEGADGETID+ 7},
  1941. X    {&select_gad[9],56,110,32,8,0,2049,4100,NULL,
  1942. X     NULL,NULL,0,(APTR)&select_sinfo[8],VALUEGADGETID+ 8},
  1943. X    {&select_gad[10],56,120,32,8,0,2049,4100,NULL,
  1944. X     NULL,NULL,0,(APTR)&select_sinfo[9],VALUEGADGETID+ 9},
  1945. X    {&select_gad[11],148,30,32,8,0,2049,4100,NULL,
  1946. X     NULL,NULL,0,(APTR)&select_sinfo[10],VALUEGADGETID+10},
  1947. X    {&select_gad[12],148,40,32,8,0,2049,4100,NULL,
  1948. X     NULL,NULL,0,(APTR)&select_sinfo[11],VALUEGADGETID+11},
  1949. X    {&select_gad[13],148,50,32,8,0,2049,4100,NULL,
  1950. X     NULL,NULL,0,(APTR)&select_sinfo[12],VALUEGADGETID+12},
  1951. X    {&select_gad[14],148,60,32,8,0,2049,4100,NULL,
  1952. X     NULL,NULL,0,(APTR)&select_sinfo[13],VALUEGADGETID+13},
  1953. X    {&select_gad[15],148,70,32,8,0,2049,4100,NULL,
  1954. X     NULL,NULL,0,(APTR)&select_sinfo[14],VALUEGADGETID+14},
  1955. X    {&select_gad[16],148,80,32,8,0,2049,4100,NULL,
  1956. X     NULL,NULL,0,(APTR)&select_sinfo[15],VALUEGADGETID+15},
  1957. X    {&select_gad[17],148,90,32,8,0,2049,4100,NULL,
  1958. X     NULL,NULL,0,(APTR)&select_sinfo[16],VALUEGADGETID+16},
  1959. X    {&select_gad[18],148,100,32,8,0,2049,4100,NULL,
  1960. X     NULL,NULL,0,(APTR)&select_sinfo[17],VALUEGADGETID+17},
  1961. X    {&select_gad[19],148,110,32,8,0,2049,4100,NULL,
  1962. X     NULL,NULL,0,(APTR)&select_sinfo[18],VALUEGADGETID+18},
  1963. X    {&select_gad[20],148,120,32,8,0,2049,4100,NULL,
  1964. X     NULL,NULL,0,(APTR)&select_sinfo[19],VALUEGADGETID+19},
  1965. X    {&select_gad[21],207,30,12,68,0,1,4099,(APTR)&select_pimg[0],
  1966. X     NULL,NULL,0,(APTR)&select_pinfo[0],PROPGADGETID},
  1967. X    {NULL,194,116,38,14,0,5,4097,NULL,
  1968. X     NULL,NULL,0,(APTR)NULL,POSGADGETID}
  1969. X};
  1970. X
  1971. Xstatic struct IntuiText select_txt[] = {
  1972. X    {2,ITXT_BPEN,ITXT_DRMD,10,8,&ta,(UBYTE*)"Select pen numbers per depth",&select_txt[1]},
  1973. X    {2,ITXT_BPEN,ITXT_DRMD,14,30,&ta,(UBYTE*)"  11",&select_txt[2]},
  1974. X    {2,ITXT_BPEN,ITXT_DRMD,14,40,&ta,(UBYTE*)"  11",&select_txt[3]},
  1975. X    {2,ITXT_BPEN,ITXT_DRMD,14,50,&ta,(UBYTE*)"  11",&select_txt[4]},
  1976. X    {2,ITXT_BPEN,ITXT_DRMD,14,60,&ta,(UBYTE*)"  11",&select_txt[5]},
  1977. X    {2,ITXT_BPEN,ITXT_DRMD,14,70,&ta,(UBYTE*)"  11",&select_txt[6]},
  1978. X    {2,ITXT_BPEN,ITXT_DRMD,14,80,&ta,(UBYTE*)"  11",&select_txt[7]},
  1979. X    {2,ITXT_BPEN,ITXT_DRMD,14,90,&ta,(UBYTE*)"  11",&select_txt[8]},
  1980. X    {2,ITXT_BPEN,ITXT_DRMD,14,100,&ta,(UBYTE*)"  11",&select_txt[9]},
  1981. X    {2,ITXT_BPEN,ITXT_DRMD,14,110,&ta,(UBYTE*)"  11",&select_txt[10]},
  1982. X    {2,ITXT_BPEN,ITXT_DRMD,14,120,&ta,(UBYTE*)"  11",&select_txt[11]},
  1983. X    {2,ITXT_BPEN,ITXT_DRMD,106,30,&ta,(UBYTE*)"  11",&select_txt[12]},
  1984. X    {2,ITXT_BPEN,ITXT_DRMD,106,40,&ta,(UBYTE*)"  11",&select_txt[13]},
  1985. X    {2,ITXT_BPEN,ITXT_DRMD,106,50,&ta,(UBYTE*)"  11",&select_txt[14]},
  1986. X    {2,ITXT_BPEN,ITXT_DRMD,106,60,&ta,(UBYTE*)"  11",&select_txt[15]},
  1987. X    {2,ITXT_BPEN,ITXT_DRMD,106,70,&ta,(UBYTE*)"  11",&select_txt[16]},
  1988. X    {2,ITXT_BPEN,ITXT_DRMD,106,80,&ta,(UBYTE*)"  11",&select_txt[17]},
  1989. X    {2,ITXT_BPEN,ITXT_DRMD,106,90,&ta,(UBYTE*)"  11",&select_txt[18]},
  1990. X    {2,ITXT_BPEN,ITXT_DRMD,106,100,&ta,(UBYTE*)"  11",&select_txt[19]},
  1991. X    {2,ITXT_BPEN,ITXT_DRMD,106,110,&ta,(UBYTE*)"  11",&select_txt[20]},
  1992. X    {2,ITXT_BPEN,ITXT_DRMD,106,120,&ta,(UBYTE*)"  11",&select_txt[21]},
  1993. X    {2,ITXT_BPEN,ITXT_DRMD,197,119,&ta,(UBYTE*)" OK ",NULL},
  1994. X};
  1995. X
  1996. Xstatic short select_brd_XY[] = {
  1997. X    193,131, 233,131, 233,114, 192,114, 192,131,
  1998. X    195,129, 231,129, 231,116, 194,116, 194,129,
  1999. X    204,101, 222,101, 222,26, 203,26, 203,101,
  2000. X    206,99, 220,99, 220,28, 205,28, 205,99,
  2001. X    103,131, 183,131, 183,26, 102,26, 102,131,
  2002. X    11,131, 91,131, 91,26, 10,26, 10,131
  2003. X};
  2004. X
  2005. Xstatic struct Border select_brd[] = {
  2006. X    {0,0,3,0,BRD_DRMD,5,&select_brd_XY[0],&select_brd[1]},
  2007. X    {0,0,0,0,BRD_DRMD,5,&select_brd_XY[10],&select_brd[2]},
  2008. X    {0,0,3,0,BRD_DRMD,5,&select_brd_XY[20],&select_brd[3]},
  2009. X    {0,0,0,0,BRD_DRMD,5,&select_brd_XY[30],&select_brd[4]},
  2010. X    {0,0,0,0,BRD_DRMD,5,&select_brd_XY[40],&select_brd[5]},
  2011. X    {0,0,0,0,BRD_DRMD,5,&select_brd_XY[50],NULL}
  2012. X};
  2013. X
  2014. Xstatic struct Requester select_req = {
  2015. X    NULL,REQ_LE,REQ_TE,244,140,0,0,select_gad,select_brd,select_txt,REQ_FLG,1,
  2016. X    NULL,{NULL},NULL,NULL,{NULL}
  2017. X};
  2018. SHAR_EOF
  2019. echo "extracting minrexx.h"
  2020. sed 's/^X//' << \SHAR_EOF > minrexx.h
  2021. X/*
  2022. X *   Includes for minrexx.c; please refer to that file for
  2023. X *   further documentation.
  2024. X */
  2025. X#include "rexx/rxslib.h"
  2026. X/*
  2027. X *   This is the list of functions we can access.  (Cheap forward
  2028. X *   declarations, too.)
  2029. X */
  2030. Xlong upRexxPort() ;
  2031. Xvoid dnRexxPort() ;
  2032. Xvoid dispRexxPort() ;
  2033. Xstruct RexxMsg *sendRexxCmd() ;
  2034. Xstruct RexxMsg *syncRexxCmd() ;
  2035. Xstruct RexxMsg *asyncRexxCmd() ;
  2036. Xvoid replyRexxCmd() ;
  2037. X/*
  2038. X *   Maximum messages that can be pending, and the return codes
  2039. X *   for two bad situations.
  2040. X */
  2041. X#define MAXRXOUTSTANDING (300)
  2042. X#define RXERRORIMGONE (100)
  2043. X#define RXERRORNOCMD (30)
  2044. X/*
  2045. X *   This is the association list you build up (statically or
  2046. X *   dynamically) that should be terminated with an entry with
  2047. X *   NULL for the name . . .
  2048. X */
  2049. Xstruct rexxCommandList {
  2050. X   char *name ;
  2051. X   APTR userdata ;
  2052. X} ;
  2053. SHAR_EOF
  2054. echo "End of archive 4 (of 4)"
  2055. # if you want to concatenate archives, remove anything after this line
  2056. exit
  2057.